#pragma once

#include <faker/basic/editHelper.h>

#include <faker/scene/Entity.h>

#include <faker/render/mesh/box/Editor.h>
#include <faker/render/mesh/filter/Editor.h>
#include <faker/render/mesh/skinned/Editor.h>
#include <faker/render/animation/single/Editor.h>
#include <faker/render/animation/animator/Editor.h>

#include <faker/render/material/simpleColor/Editor.h>
#include <faker/render/material/phong/Editor.h>
#include <faker/render/material/pbr/Editor.h>

#include <faker/render/camera/firstview/Inst.h>
#include <faker/render/camera/controller/Inst.h>
#include <faker/render/camera/ortho/Inst.h>

namespace Faker
{
    namespace Render
    {
        struct Editor
        {
            Faker::Render::Mesh::Box::Editor m_MeshBoxEditor;
            Faker::Render::Mesh::Skinned::Editor m_SkinnedMeshEditor;
            Faker::Render::Mesh::Filter::Editor m_MeshFilterEditor;
            Faker::Render::Animation::Single::Editor m_SingleAnimationEditor;
            Faker::Render::Animation::Animator::Editor m_AnimatorEditor;
            Faker::Render::Material::SimpleColor::Editor m_SimpleColorEditor;
            Faker::Render::Material::Phong::Editor m_PhongEditor;
            Faker::Render::Material::Pbr::Editor m_PbrMaterialEditor;

            Faker::Render::Camera::Firstview::Inst m_FirstViewEditor;
            Faker::Render::Camera::Controller::Inst m_CameraControllerEditor;
            Faker::Render::Camera::Ortho::Inst m_OrthoCameraEditor;

            bool Edit(Faker::Entity &inst);
        };
    }
};